13.2.14 VALUES 语句

您所在的位置:网站首页 values[0][0] 13.2.14 VALUES 语句

13.2.14 VALUES 语句

2024-07-13 21:26| 来源: 网络整理| 查看: 265

13.2.14 VALUES 语句

VALUES是 MySQL 8.0.19 中引入的 DML 语句,它返回一组一行或多行作为表。换句话说,它是一个表值构造函数,也可以作为一个独立的 SQL 语句。

VALUES row_constructor_list [ORDER BY column_designator] [LIMIT number] row_constructor_list: ROW(value_list)[, ROW(value_list)][, ...] value_list: value[, value][, ...] column_designator: column_index

该VALUES语句由VALUES关键字组成,后跟一个或多个行构造函数的列表,以逗号分隔。行构造函数由ROW()行构造函数子句和括号中包含的一个或多个标量值的值列表组成。值可以是任何 MySQL 数据类型的文字或解析为标量值的表达式。

ROW()不能为空(但每个提供的标量值都可以是NULL)。ROW()同一 语句中的每个 VALUES值在其值列表中都必须具有相同数量的值。

DEFAULT关键字不受支持 VALUES并导致语法错误,除非它用于在语句中提供 值INSERT。

的输出VALUES是一个表:

mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8); +----------+----------+----------+ | column_0 | column_1 | column_2 | +----------+----------+----------+ | 1 | -2 | 3 | | 5 | 7 | 9 | | 4 | 6 | 8 | +----------+----------+----------+ 3 rows in set (0.00 sec)

从中输出的表的列 VALUES具有隐式命名的列column_0、column_1、 column_2等,始终以 开头 0。这个事实可用于使用可选ORDER BY子句按列对行进行排序,其方式与此子句用于 SELECT语句的方式相同,如下所示:

mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1; +----------+----------+----------+ | column_0 | column_1 | column_2 | +----------+----------+----------+ | 1 | -2 | 3 | | 4 | 6 | 8 | | 5 | 7 | 9 | +----------+----------+----------+ 3 rows in set (0.00 sec)

在MySQL 8.0.21及之后的版本中,该 VALUES语句还支持 LIMIT限制输出行数的子句。(以前,LIMIT允许但什么也没做。)

该VALUES语句对于列值的数据类型是宽松的;您可以在同一列中混合类型,如下所示:

mysql> VALUES ROW("q", 42, '2019-12-18'), -> ROW(23, "abc", 98.6), -> ROW(27.0002, "Mary Smith", '{"a": 10, "b": 25}'); +----------+------------+--------------------+ | column_0 | column_1 | column_2 | +----------+------------+--------------------+ | q | 42 | 2019-12-18 | | 23 | abc | 98.6 | | 27.0002 | Mary Smith | {"a": 10, "b": 25} | +----------+------------+--------------------+ 3 rows in set (0.00 sec) 重要的

VALUES用一个或多个 ROW()acts 实例作为表值构造函数;尽管它可用于在 INSERTor REPLACE语句中提供值,但不要将它与VALUES也用于此目的的关键字混淆。您也不应该将它与 VALUES()引用 INSERT ... ON DUPLICATE KEY UPDATE.

您还应该记住,这ROW()是一个行值构造函数(请参阅第 13.2.11.5 节,“行子查询”),而VALUES ROW()是一个表值构造函数;两者不能互换使用。

VALUES可用于您可以雇用的许多情况SELECT,包括此处列出的情况:

使用UNION,如下所示:

mysql> SELECT 1,2 UNION SELECT 10,15; +----+----+ | 1 | 2 | +----+----+ | 1 | 2 | | 10 | 15 | +----+----+ 2 rows in set (0.00 sec) mysql> VALUES ROW(1,2) UNION VALUES ROW(10,15); +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 10 | 15 | +----------+----------+ 2 rows in set (0.00 sec)

您可以将具有多行的构造表合并在一起,如下所示:

mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6) > UNION VALUES ROW(10,15),ROW(20,25); +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 10 | 15 | | 20 | 25 | +----------+----------+ 5 rows in set (0.00 sec)

在这种情况下,您也可以(通常最好是) UNION完全省略并使用单个VALUES语句,如下所示:

mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25); +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 10 | 15 | | 20 | 25 | +----------+----------+

VALUES也可以与 SELECT语句、 TABLE语句或两者结合使用。

中构造的表 UNION必须包含相同数量的列,就像您使用 SELECT. 有关更多示例,请参见 第 13.2.10.3 节,“UNION 子句”。

在加入。有关更多信息和示例, 请参阅第 13.2.10.2 节,“JOIN 子句” 。

VALUES()在 INSERTor 语句中 代替REPLACE,在这种情况下,其语义与此处描述的略有不同。有关详细信息,请参阅第 13.2.6 节,“INSERT 语句”。

代替 和 中的源 CREATE TABLE ... SELECT表 CREATE VIEW ... SELECT。有关更多信息和示例,请参阅这些语句的描述。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3